/*观察者模式说明
    1.两个类：观察者和主体
    2.给主体定义属性：状态、所属观察者
    3.给主体添加方法：添加观察者、状态改变（更新状态并告知观察者）
    4.给观察者添加方法：当主体状态变化时，定义观察者需要作出的操作

*/

class Subject{
    constructor(name){
        this.name=name;
        this.state='开心';  //状态
        this.observers=[]   //观察者
    }

    //将观察者加进去
    attach(observer){
        this.observers.push(observer)
    }

    // 改变状态，回应观察者
    setState(state){
        this.state=state
        this.observers.forEach(person=>{
            person.update(this)
        })
    }
}

class Observer{
    constructor(name){
        this.name=name
    };

    // 获取新状态
    update(Subject){
        console.log(`观察者${this.name}:${Subject.name}的状态更新为——${Subject.state}`)
    }
}

let baby=new Subject('小宝宝')
let mom=new Observer('妈妈')
let dad=new Observer('爸爸')

baby.attach(mom)
baby.attach(dad)
baby.setState('哭了')
baby.setState('饿了')



